/**
 * Copyright (c) [2025] [何屹林]
 *
 * 保留所有权利。
 *
 * 文件名称：mainwindow.h
 * 模块功能说明：
 * 该模块实现展示功能，主要承载ui，实例化了逻辑处理对象，调用逻辑处理对象的各个接口
 *
 * 华南师范大学-计算机学院-网络工程-1班
 * 作者：何屹林-20222132023
 * 完成日期：2025年7月24日
 */
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

#include <QMainWindow>
#include <QButtonGroup>
#include <QDragEnterEvent>
#include <QTextEdit>
#include <QPainter>
#include <QDesktopServices>

#include "utils.h"
#include "logic.h"

using namespace std;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void openReg();
    void openGram();
    void save();
    void saveAs();
    void clear();
    void exit();
    void help();

//    void handleDragEnterEvent(QDragEnterEvent *event, QTextEdit* textEdit);
//    void handleDropEvent(QDropEvent *event, QTextEdit* textEdit, QString &filePath, QString &fileName);



//    void on_textEdit_dragEnterEvent(QDragEnterEvent *event); //拖动进入事件
//    void on_textEdit_2_dragEnterEvent(QDragEnterEvent *event); //拖动进入事件
//    void on_textEdit_dropEvent(QDropEvent *event);           //放下事件
//    void on_textEdit_2_dropEvent(QDropEvent *event);           //放下事件

    void file_read(QString);

    void NFAMakerShow();
    void DFAMakerShow();
    void minDFAMakerShow();
    void genCodeShow();

    void FirstFollowShow();
    void LR_0_DFAShow();
    void SLRShow();
    void LR_1_DFAShow();
    void LR_1_TableShow();
    void LR_1_ProcessShow();
    void ASTShow();

    void tableViewProcessShow(QVector<QVector<QString>> );
private:
    Ui::MainWindow *ui;

    SyntaxNode *ROOT;

    Logic logic;        //逻辑函数放到logic中实现
    QStandardItemModel* Lr1ProcessShowModel;

    QString regFileAddress;
    QString regFileName;
    QString regFilePath;
    QString gramFileAddress;
    QString gramFileName;
    QString gramFilePath;

};
#endif // MAINWINDOW_H
